package com.zbf.auth.service;

import com.zbf.auth.dao.MenuDao;
import com.zbf.auth.dao.UserDao;
import com.zbf.auth.user.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 作者: LCG
 * 日期: 2020/6/1 11:58
 * 描述: 处理权限菜单信息
 */

@Component
public class MenuService {

    @Autowired
    private UserDao userDao;

    @Autowired
    private MenuDao menuDao;

    /**
     * 根据用户Id查询用户的信息
     * @param userId
     * @return
     */
    public Map<String,Object> getUserMenuInfo(Long userId){
        //获取用户的角色
        List<Long> userRole = userDao.getUserRole(userId);

        //存储用户的权限信息并去除重复的权限url（url）
        Map<String,String> menuMap=new HashMap<>();

        //根据角色获取用户的权限信息（获取一级菜单）
        if(userRole.size()==0){
            userRole.add(0L);
        }
        List<Menu> menuList = menuDao.getMenuList(userRole);
        //获取一级菜单
        for (Menu menu : menuList) {
            menuMap.put(menu.getUrl(),"");
            //递归调用获取菜单信息
            this.getChildMenu(menu,userRole,menu.getCode(),menu.getLeval()+1,menuMap);
        }

        Map<String,Object> map=new HashMap<>();
        map.put("menuUrlMap",menuMap);
        map.put("userMenuList",menuList);

        return map;
    }

    /**
     * 获取子菜单的递归方法
     * @param menu
     * @param userRole
     * @param parentCode
     * @param leval
     * @param menuMap
     */
    public void getChildMenu(Menu menu,List<Long> userRole,Long parentCode,int leval,Map<String,String> menuMap){

        List<Menu> childMenuList = menuDao.getChildMenuList(userRole, parentCode, leval);

        if(childMenuList.size()>0){
            menu.setListMenu(childMenuList);
            for (Menu menu1 : childMenuList) {
                //存储url权限信息
                menuMap.put(menu1.getUrl(),"");
                //递归调用获取下级信息
                this.getChildMenu(menu1,userRole,menu1.getCode(),menu1.getLeval()+1,menuMap);
            }
        }else{
            return;
        }

    }


    /**
     * 查询所有的菜单
     * @return
     */
    public List<Menu> getAllMenu(){

        //根据角色获取用户的权限信息（获取一级菜单）
        List<Menu> menuList = menuDao.getAllMenuOfFirst();
        //获取一级菜单
        for (Menu menu : menuList) {
            //递归调用获取菜单信息
            this.getChildMenuFromParentCode(menu,menu.getCode(),menu.getLeval()+1);
        }
        return menuList;

    }


    /**
     * 获取子菜单的递归方法
     * @param menu
     * @param parentCode
     * @param leval
     */
    public void getChildMenuFromParentCode(Menu menu,Long parentCode,int leval){

        List<Menu> childMenuList = menuDao.getChildrenListUsePraentCode(parentCode,leval);

        if(childMenuList.size()>0){
            menu.setListMenu(childMenuList);
            for (Menu menu1 : childMenuList) {
                //递归调用获取下级信息
                this.getChildMenuFromParentCode(menu1,menu1.getCode(),menu1.getLeval()+1);
            }
        }else{
            return;
        }

    }

}
